#include <vector>
#include <iostream>
#include <algorithm>

using namespace std;

int sheepCount(int village)
{
    if (village >= 7)
    {
        return 2;
    }

    village++;

    int sheep_xyc = sheepCount(village);

    cout << village << " : " << sheep_xyc << endl;

    int sheep_bc = (sheep_xyc + 1) * 2;

    return sheep_bc;
}

int sheepCount_zz(int village)
{
    if (village >= 7)
    {
        cout << village << " : " << 2 << endl;

        return 2;
    }

    int sheep = sheepCount_zz(village + 1);

    sheep = (sheep + 1) * 2;

    cout << village << " : " << sheep << endl;

    return sheep;
}
/*
1. 假设有一个二维整数数组 `matrix`，它满足以下条件：

* `matrix` 中的所有数字都不重复；
* `matrix` 中每一行的数字都是已经排序的；
* `matrix` 中每一列的数字都是已经排序的；
* `matrix` 中的行数和列数不一定相同；

编写一个函数，**只用一层循环**，在 `matrix` 中寻找一个 `targetNumber`，如果 `targetNumber` 存在，就返回它的位置，否则就返回 `[-1, -1]`。

例如，对于 `matrix` 等于：

```cpp
matrix = [
  1, 6,  8,  9,
  2, 7, 10, 11,
  5, 8, 12, 18
]
```

如果 `targetNumber` 等于 10，那么我们的函数应该返回 `[1, 2]`。以下，是这个问题的实现，阅读其中的代码和注释，并补全空白处的代码：
*/

vector<int> searchInSortedMatrix(
    vector<vector<int>> matrix, int targetNumber)
{
    int row = 0;
    int col = matrix[0].size() - 1;

    // 只要没有到 matrix 的最后一行，并且，没有到第 0 列
    while (row < matrix.size() && col >= 0)
    {
        if (matrix[row][col] > targetNumber)
        {
            --col;
        }
        else if (matrix[row][col] < targetNumber)
        {
            // 否则，处理 matrix[row][col] < targetNumber 的逻辑
            ++row;
        }
        else
        {
            // 否则，就表示我们找到了答案
            return { row, col };
        }
    }

    // 当整个循环结束之后都没有找到 target，按要求返回 [-1, -1]
    return { -1, -1 };
}

int main(int argc, char const *argv[])
{
    //int sheep = sheepCount(0);
    //cout << "出发时: " << sheep << endl;

    int sheep = sheepCount_zz(0);
    cout << "出发时: " << sheep << endl;
    
    cout << "********************************" << endl;

    vector<vector<int>> matrix = {
        { 1, 6,  8,  9 },
        { 2, 7,  10, 11},
        { 5, 8,  12, 18}
    };
    int targetNumber = 10;

    vector<int> pos = searchInSortedMatrix(matrix, 12);
    cout<<pos[0]+1<<" , "<<pos[1]+1<<endl;

    return 0;
}